package com.dc.commons.helper;

import java.text.ParseException;
import java.util.Date;

import org.apache.commons.lang3.time.DateFormatUtils;

/*******************************************************************************<P>
 * 文件名: DateHelper.java <br>
 * 版本: 1.0<br>
 * 描述: 日期操作辅助类<br>
 * 版权所有: <br>
 * <P>
 * 创建者: 王建栋 <br>
 * 创建日期: 2015年12月15日 上午12:15:51<br>
 * 修改者: <br>
 * 修改日期: <br>
 * 修改说明: <br>
 ******************************************************************************/
public class DateHelper extends org.apache.commons.lang3.time.DateUtils {
	

	private DateHelper(){
		throw new RuntimeException("DateHelper 不需要实例化！");
	}
	private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" };
	
	/**
	 * 日期时间格式
	 */
	public static final String DATE_TIME="yyyy-MM-dd HH:mm:ss";
	/**
	 * 日期格式
	 */
	public static final String DATE="yyyy-MM-dd";
	/**
	 * 时间格式
	 */
	public static final String TIME="HH:mm:ss";
	
	/**
	 * 根据字符串解析时间 
	 * "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"
	 * @param str
	 * @return date
	 */
	public static Date parseDate(Object str) {
		if (str == null){
			return null;
		}else if(str instanceof Date){
			return (Date)str;
		}else{
				try {
					return parseDate(str.toString(), parsePatterns);
				} catch (ParseException e) {
					return null;
				}
		}
	}
	
	/**
	 * 格式化时间
	 * @param date
	 * @param pattern
	 * @return formate  date
	 */
	public static String format(Date date, Object... pattern) {
		if (pattern != null && pattern.length > 0&&pattern[0]!=null) {
			return DateFormatUtils.format(date, pattern[0].toString());
		} else {
			return  DateFormatUtils.format(date, DATE);
		}
	}
	
	/**
	 * 获取 时间日期格式
	 * @param date
	 * @return formatDateTime
	 */
	public static String formatDateTime(Date date){
		return format(date, DATE_TIME);
	}
	
	/**
	 * 获取当前时间的 时间日期格式
	 * @return formatDateTime
	 */
	public static String formatDateTime(){
		return format(newDate(), DATE_TIME);
	}
	
	/**
	 * 获取当前时间的 日期格式
	 * @param date
	 * @return formatDate
	 */
	public static String formatDate(Date date){
		return format(date, DATE);
	}
	
	/**
	 * 获取当前时间的 日期格式
	 * @return formatDate
	 */
	public static String formatDate(){
		return format(newDate(), DATE);
	}
	
	/**
	 * 获取 日期格式
	 * @param date
	 * @return formatTime
	 */
	public static String formatTime(Date date){
		return format(date, TIME);
	}
	
	/**
	 * 获取 日期格式
	 * @return formatTime
	 */
	public static String formatTime(){
		return format(newDate(), TIME);
	}
	
	
	
	
	
	/**
	 * 获取当前时间
	 * @return newDate
	 */
	public static Date newDate(){
		return new Date();
	}
}
